/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy. */

package cz.vse.adventura.po1715.cerj117_cermak.hra;

import cz.pecinovsky.english.pojj.adv_framework.game_gui.IObjectG;
import javax.swing.Icon;





/*******************************************************************************
 * Instance třídy {@code Předmět} (přesněji instance jejích potomků) mají
 * na starost interpretaci přikazů zadávaných uživatelem hrajícím danou hru.
 * Třída {@code Příkaz} je rodičovskou třídou všech přikazů.
 *
 * @author    Jiří Čermák
 * @version   1.00.000
 */
public class Předmět implements IObjectG
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

     /** Prefix určující, že předmět nepůjde zvednout. */
    public static final char NEZVEDNUTELNÝ = '#';

    /** Prefix určující, že se jkedná o ... */
    public static final char POUŽITELNÝ = '@';

    /** Univerzílní předmět zastupující všechny nezvednutelné předměty. */
    public static final Předmět PEVNÁ = new Předmět( "#PEVNÁ" );


//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    private final boolean zvednutelný;
    private final boolean použitelný;
    private final String název;

//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří nový předmět se zadaným názvem, zvednutelností
     * a informací o tom, zda se jedná a alkoholický nápoj.
     * Je-li prvním znakem názvu přemětu znak # označující nevzednutelné
     * předměty, bude z názvu odebrán a předmětu bude označen za nezvednutelný.
     * Je-li prvním znakem názvu přemětu znak @ označující alkoholické nápoje,
     * bude z názvu odebrán a předmětu bude označen za alkoholický nápoj.
     *
     * @param název Název předmětu <br>
     *              - začíná-li znakem #, není předmět zvednutelný,<br>
     *              - začíná-li znakem @, jedná se o ...
     */
    public Předmět(String název)
    {
        boolean a = false,
                z = true;

        switch (název.charAt(0))
        {
            case NEZVEDNUTELNÝ:
                název = název.substring(1);
                z = false;
                break;

            case POUŽITELNÝ:
                název = název.substring(1);
                a = true;
                break;
        }
        this.název       = název;
        this.použitelný = a;
        this.zvednutelný = z;
    }

    /***************************************************************************
     *z animace
     */
//    public Předmět(boolean zvednutelný, String název)
//    {
//        this.zvednutelný = zvednutelný;
//        this.název = název;
//    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

     /***************************************************************************
     * Vrátí název místnosti.
     *
     * @return Název místnosti
     */
    @Override
    public String getName()
    {
        return název;
    }


     /***************************************************************************
     * Vrátí informaci o tom, dá-li se předmět zvednout a vložit do batohu.
     *
     * @return {@code true} - dá se zvednout, jinak {@code false}
     */
    @Override
    public boolean isTransportable()
    {
        return zvednutelný;
    }

     /***************************************************************************
     * Vrátí informaci o tom, je-li daný předmět ....
     *
     * @return {@code true} jedná-li se o ...., jinak {@code false}
     */
    public boolean isPoužitelný() {
        return použitelný;
    }

//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

     /***************************************************************************
     * Vrátí název dané instance.
     *
     * @return Nazev instance
     */
    @Override
    public String toString()
    {
        return název;
    }


     /***************************************************************************
     * Vrátí odkaz na obrázek daného předmětu.
     *
     * @return  Požadovaný odkaz
     */
    @Override
    public Icon getPicture() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTOVACÍ METODY A TŘÍDY ==================================================
//
//     /***************************************************************************
//      * Testovací metoda.
//      */
//     public static void test()
//     {
//         Předmět instance = new Předmět();
//     }
//     /** @param args Parametry příkazového řádku - nepoužívané. */
//     public static void main(String[] args)  {  test();  }
}
